import type { App } from 'vue';
import {
  type RouterHistory,
  createMemoryHistory,
  createRouter,
  createWebHashHistory,
  createWebHistory
} from 'vue-router';
import { createBuiltinVueRoutes } from './routes/builtin';
import { createRouterGuard } from './guard';

// 从环境变量中获取路由模式和基础URL
const { VITE_ROUTER_HISTORY_MODE = 'history', VITE_BASE_URL } = import.meta.env;

// 路由历史模式映射表
// hash: 使用 URL hash 模式（带 # 的 URL）
// history: 使用 HTML5 History API 模式
// memory: 使用内存模式（主要用于 SSR）
const historyCreatorMap: Record<Env.RouterHistoryMode, (base?: string) => RouterHistory> = {
  hash: createWebHashHistory,
  history: createWebHistory,
  memory: createMemoryHistory
};

// 创建路由实例
export const router = createRouter({
  // 根据环境变量选择路由历史模式
  history: historyCreatorMap[VITE_ROUTER_HISTORY_MODE](VITE_BASE_URL),
  // 使用内置路由配置
  routes: createBuiltinVueRoutes()
});

/** 设置 Vue Router */
export async function setupRouter(app: App) {
  // 将路由实例挂载到 Vue 应用
  app.use(router);
  // 创建路由守卫
  createRouterGuard(router);
  // 等待路由准备就绪
  await router.isReady();
}
